package lp2.projeto;
import org.junit.*;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.List;

public class AgendaTest{
	Agenda minhaAgenda = new Agenda();
	Agenda agendaMultiTudo;
	Evento novoEvento;
	
	@Test
	public void testaPerfilDeUsuario(){
		minhaAgenda.addPerfilDeUsuario("Grupo", "grupo de lp2 para criacao desta agenda", "grupo@ccc.ufcg.edu.br");
		Assert.assertEquals("Nome: Grupo\nEmail: grupo@ccc.ufcg.edu.br\nDescricao: grupo de lp2 para criacao desta agenda", minhaAgenda.getPerfilDoUsuario());
		
		String perfilDoUsuario = minhaAgenda.getPerfilDoUsuario();
		Assert.assertEquals("Nome: Grupo\nEmail: grupo@ccc.ufcg.edu.br\nDescricao: grupo de lp2 para criacao desta agenda", perfilDoUsuario);
		
		minhaAgenda.setNomeDoUsuario("Grupo2");
		Assert.assertEquals("Nome: Grupo2\nEmail: grupo@ccc.ufcg.edu.br\nDescricao: grupo de lp2 para criacao desta agenda", minhaAgenda.getPerfilDoUsuario());
		
		minhaAgenda.setEmailDoUsuario("grupo@dsc.ufcg.edu.br");
		Assert.assertEquals("Nome: Grupo2\nEmail: grupo@dsc.ufcg.edu.br\nDescricao: grupo de lp2 para criacao desta agenda", minhaAgenda.getPerfilDoUsuario());

		minhaAgenda.setDescricaoDoUsuario("Grupo de lp2");
		Assert.assertEquals("Nome: Grupo2\nEmail: grupo@dsc.ufcg.edu.br\nDescricao: Grupo de lp2", minhaAgenda.getPerfilDoUsuario());
		
		minhaAgenda.setPerfilDoUsuario("Grupo3", "Outro grupo", "outrogrupo@ccc.ufcg.edu.br");
		Assert.assertEquals("Nome: Grupo3\nEmail: outrogrupo@ccc.ufcg.edu.br\nDescricao: Outro grupo", minhaAgenda.getPerfilDoUsuario());

		minhaAgenda.limparPerfilDoUsuario();
		Assert.assertEquals("Nome: \nEmail: \nDescricao: ", minhaAgenda.getPerfilDoUsuario());

		
	}
	
	@Before
	public void setUp(){
		agendaMultiTudo = new Agenda();
		agendaMultiTudo.addPerfilDeUsuario("Grupo de LP2", "Grupo para projeto de lp2", "grupolp2@ccc.ufcg.eu.br");
	}
	
	@Test
	public void testaEventoPassado(){
		try{
			agendaMultiTudo.addEventos("Aula de p2", "21/01/2011", "10:00", "120", "Aula sobre Framework de Collections"); // essa linha esta com um comportamento estranho, esta criando a data um mes depois
		}catch (Exception e){
		}
		
		
		try {
			Assert.assertEquals(new Evento("Aula de p2", "21/01/2011", "10:00", "120", "Aula sobre Framework de Collections"), agendaMultiTudo.getEventosPassados().get(0));
		} catch (Exception e1) {
			e1.printStackTrace();
			Assert.fail();
		}
		
		try{
			agendaMultiTudo.addEventos("Caminhar", "21/01/2011", "10:00", "60", "Fiquei em forma");
		}catch (Exception e){
			Assert.assertEquals("Conflito de horario", e.getMessage());
		}
	}

	@Test
	public void testaEventoFuturo(){
		
		try{
			agendaMultiTudo.addEventos("Aula de p2", "23/11/2011", "08:00", "120", "Sera que ainda havera aula");
		}catch (Exception e){
			Assert.fail();
		}
				
		try {
			Assert.assertEquals(new Evento("Aula de p2", "23/11/2011", "08:00", "120", "Sera que ainda havera aula"), agendaMultiTudo.getEventosFuturos().get(0));
		} catch (Exception e1) {
			Assert.fail();
		}
		
		try{
			agendaMultiTudo.addEventos("Caminhar", "23/11/2011", "08:00", "60", "Ficar saudavel", "Saude");
		}catch (Exception e){
			Assert.assertEquals("Conflito de horario", e.getMessage());
		}
		
		
	}
	
	@Test
	public void testaContatoAgenda(){
		
		Assert.assertTrue(agendaMultiTudo.getContatos().size() == 0);
		try {
			agendaMultiTudo.addContato(new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")));
		} catch (Exception e) {
			
		}
		
		try {
			Assert.assertEquals(new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")), agendaMultiTudo.getContatos().get(0));
		} catch (Exception e) {
		}
		
		try {
			agendaMultiTudo.removerContato(new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")));
		} catch (Exception e) {
		}
		Assert.assertTrue(agendaMultiTudo.getContatos().size() == 0);
		
	}
	
	@Test
	public void testaContatoEvento(){
		try{
			agendaMultiTudo.addEventos("Aula de p2", "23/11/2011", "08:00", "120", "Sera que ainda havera aula");
		}catch (Exception e){
			Assert.fail();
		}
		try {
			agendaMultiTudo.addContatoEmEvento(new Evento("Aula de p2", "23/11/2011", "08:00", "120", "Sera que ainda havera aula"),new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")));
		} catch (Exception e) {
			
		}
		
		try {
			Assert.assertEquals(new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")), agendaMultiTudo.getEventosFuturos().get(0).getContatosRelacionados().get(0));
		} catch (Exception e) {
			
		}
		
		try {
			Assert.assertEquals(new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")), agendaMultiTudo.procuraContato("jo").get(0));
		} catch (Exception e1) {
			
		}
		
		try {
			agendaMultiTudo.removerContatoDeContato(agendaMultiTudo.getEventosFuturos().get(0), new Contato("Joao", "444", "Rua Luiz Gonzaga", "23/11", new FormaDeContato("Email", "joao@ccc.ufcg.edu.br")) );
		} catch (Exception e) {
			
		}
		Assert.assertTrue(agendaMultiTudo.getEventosFuturos().get(0).getContatosRelacionados().size() == 0);
		
		
	}


}
